package projeto;

import static org.junit.Assert.*;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class ProfessorTest {
	
	private Professor professor;
	private Sala sala,sala1,sala2;
	private Livro livro1, livro2, livro3;
	
	@Before
	public void setUp() throws Exception {
		
		sala = new Sala("LSD", 102);
		sala1 = new Sala("CX", 202);
		sala2 = new Sala("CA", 101);
		
		professor = new Professor("Prof", "8218952", sala);
		
		livro1 = new Livro("Calculo", "Thomas", "Livro de Calculo", sala1);
		livro2 = new Livro("Java e OO", "Deitel", "Livro de Java", sala2);
		livro3 = new Livro("Linear", "Murilo", "Livro de Linear", sala1);
		professor.adicionaLivro(livro1);
		professor.adicionaLivro(livro2);
		professor.adicionaLivro(livro3);
		//livro1 = new Livro("Calculo", "Thomas", "Livro de Calculo", "Aplicacoes Matematicas", "Paulo", calculo.png, sala3, "0001");
		//livro2 = new Livro("Java e OO", "Deitel", "Livro de Java", "Linguagens de Prog", "Van Eyck", java.png, sala2, "0002");
		//livro3 = new Livro("Linear", "Murilo", "Livro de Linear", "Aplicacoes Lineares", "Alisson", linear.png, sala1, "0003");
	}

	@Test
	public void testaCriacaoDoProfessor() {
		
		try{
    		new Professor(null, "81565165", sala);
    		Assert.fail("Nome Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Nome Invalido", e.getMessage());
    	}
		
		try{
    		new Professor("", "132165", sala);
    		Assert.fail("Nome Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Nome Invalido", e.getMessage());
    	}
		
		try{
    		new Professor("Reinaldo", null, sala);
    		Assert.fail("Matricula Invalida");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Matricula Invalida", e.getMessage());
    	}
		
		try{
    		new Professor("Livia", "", sala);
    		Assert.fail("Matricula Invalida");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Matricula Invalida", e.getMessage());
    	}
		
		try{
    		new Professor("Reinaldo", "98484984", null);
    		Assert.fail("Sala Invalida");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Sala Invalida", e.getMessage());
    	}
		
		try{
    		new Professor(null, "841295", null);
    		Assert.fail("Nome Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Nome Invalido", e.getMessage());
    	}
		
	}
	
	@Test
	public void testaAdicionaLivro(){
		
		professor.adicionaLivro(livro1);
		professor.adicionaLivro(livro2);
		professor.adicionaLivro(livro3);
		Assert.assertTrue(professor.bibliotecaParticular.size() == 6);
		professor.bibliotecaParticular.remove(livro2);
		Assert.assertTrue(professor.bibliotecaParticular.size() == 5);
		
	}
	
	@Test
	public void testaBuscaLivroPorTitulo(){
		Assert.assertEquals(professor.buscaLivroPorTitulo("Calculo"), livro1);
		Assert.assertEquals(professor.buscaLivroPorTitulo("Java e OO"), livro2);
		Assert.assertEquals(professor.buscaLivroPorTitulo("Linear"), livro3);
		
	}
	
	@Test
	public void testaBuscaLivroPorAutor(){
		Assert.assertEquals(professor.buscaLivroPorAutor("Thomas"), livro1);
		Assert.assertEquals(professor.buscaLivroPorAutor("Deitel"), livro2);
		Assert.assertEquals(professor.buscaLivroPorAutor("Murilo"), livro3);
		
	}
	
	/*
	@Test
	public void testaBuscaLivroPorId(){
		//Assert.assertEquals(professor.buscaLivroPorID("0001"), livro1.getId());
		Assert.assertEquals(professor.buscaLivroPorID("0002"), livro2);
		Assert.assertEquals(professor.buscaLivroPorID("0003"), livro3);
	}
	*/
	@Test
	public void testaGetNomeProfessor(){
		Assert.assertEquals(professor.getNome(), "Prof");
	}
	
	@Test
	public void testaGetMatriculaProfessor(){
		Assert.assertEquals(professor.getMatricula(), "8218952");
	}
	
	@Test
	public void testaGetSalaProfessor(){
		Assert.assertEquals(professor.getSala(), sala);
	}
	
	
}